/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * NewJDialog.java
 *
 * Created on Oct 31, 2011, 3:12:27 PM
 */

package visual.Almacenamiento;

import alogic.alAlgMetaHeu;
import bentity.beAlmacen;
import bentity.beCoordenada;
import bentity.beEntrada;
import bentity.beIncidencia;
import bentity.bePallet;
import bentity.beUbicacion;
import blogic.blHelper;
import blogic.blIncidencia;
import blogic.blRack;
import blogic.blUbicacion;
import java.sql.Date;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import visual.Seguridad.visualHelper;
import bentity.beUsuario;
import blogic.blLog;
import blogic.blOrdenDespacho;
import blogic.blPallet;
import visual.Despacho.dlgConsultarRutaOptima;


/**
 *
 * @author cesar
 */
public class dlgAsociar extends javax.swing.JDialog {
    public static final int INDICADOR = 1;
    public static final int E_ACTIVO = 31;
    public static final int INDICADOR_4 =4;
    private beUsuario usuario = null;
    private static final String IRACK = "Rack";
    private static final String IPALLET = "Pallet";
    private static final String RESERVADO = null;
    private int E_RESERVADO = -1;
    public int idUbicacion = -1;

    public int getIdOrden() {
        return idOrden;
    }

    public void setIdOrden(int idOrden) {
        this.idOrden = idOrden;
    }
    public int idOrden = -1;


    /** Creates new form NewJDialog */
    public dlgAsociar(pnfMantenimientoIncidencias parent, boolean modal,beUsuario usuario) {
        super((java.awt.Frame)null, modal);
        this.usuario = usuario;
        initComponents();
        int fila = parent.getTblIncidencia().getSelectedRow();
        String dato = "";
        for(int i=0; i<parent.getTblIncidencia().getColumnCount(); i++){
            dato = String.valueOf(parent.getTblIncidencia().getValueAt(fila, i));
            switch (i){
                case 0:
                    this.txtCodigo.setText(dato);
                    break;

                case 1:
                    break;
                case 2:
                    this.txtDescripcion.setText(dato);
                    break;
                case 3:
                    break;
                 case 4:
                     if (dato.compareTo("PALLET") == 0){
                         this.rbnProducto.setSelected(true);
                         this.rbnRack.setSelected(false);
                     }
                     else{
                         this.rbnProducto.setSelected(false);
                         this.rbnRack.setSelected(true);

                     }


            }
        }
        //this.dtcFecha.setEnabled(false);
        this.rbnProducto.setEnabled(false);
        this.rbnRack.setEnabled(false);
        if(this.rbnRack.isSelected())
            this.btnBuscarPallet.setEnabled(false);
        else
            this.btnBuscarRack.setEnabled(false);

        this.txtDescripcion.setEnabled(false);
        this.txtCodPallet.setEnabled(false);
        this.txtCodRack.setEnabled(false);
        this.setBounds(0, 0, 700, 600);
        this.setResizable(false);
        visualHelper.centrarDialogoEnPantalla(this);

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblTitulo = new javax.swing.JLabel();
        pnlEliminarPallet = new javax.swing.JPanel();
        lblRack = new javax.swing.JLabel();
        jScrollPane4 = new javax.swing.JScrollPane();
        txtDescripcion = new javax.swing.JTextArea();
        lblCodigo = new javax.swing.JLabel();
        txtCodPallet = new javax.swing.JTextField();
        lblCosto1 = new javax.swing.JLabel();
        rbnRack = new javax.swing.JRadioButton();
        rbnProducto = new javax.swing.JRadioButton();
        lblDescripcion = new javax.swing.JLabel();
        txtCodigo = new javax.swing.JTextField();
        txtCodRack = new javax.swing.JTextField();
        lblPallet = new javax.swing.JLabel();
        btnBuscarRack = new javax.swing.JButton();
        btnBuscarPallet = new javax.swing.JButton();
        lblBusqFila = new javax.swing.JLabel();
        lblBusqFila1 = new javax.swing.JLabel();
        btnAsociar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setAlwaysOnTop(true);
        setModal(true);
        getContentPane().setLayout(null);

        lblTitulo.setFont(new java.awt.Font("DejaVu Sans", 0, 36));
        lblTitulo.setForeground(new java.awt.Color(0, 0, 0));
        lblTitulo.setText("Asociar incidencia");
        getContentPane().add(lblTitulo);
        lblTitulo.setBounds(200, 30, 327, 43);

        pnlEliminarPallet.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Datos de Incidencia", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 14), new java.awt.Color(0, 0, 0))); // NOI18N
        pnlEliminarPallet.setLayout(null);

        lblRack.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        lblRack.setForeground(java.awt.Color.black);
        lblRack.setText("Rack");
        pnlEliminarPallet.add(lblRack);
        lblRack.setBounds(70, 250, 70, 15);

        txtDescripcion.setColumns(20);
        txtDescripcion.setEditable(false);
        txtDescripcion.setRows(5);
        txtDescripcion.setEnabled(false);
        jScrollPane4.setViewportView(txtDescripcion);

        pnlEliminarPallet.add(jScrollPane4);
        jScrollPane4.setBounds(160, 80, 270, 100);

        lblCodigo.setFont(new java.awt.Font("Dialog", 0, 12));
        lblCodigo.setText("Codigo");
        pnlEliminarPallet.add(lblCodigo);
        lblCodigo.setBounds(70, 40, 43, 15);

        txtCodPallet.setEnabled(false);
        pnlEliminarPallet.add(txtCodPallet);
        txtCodPallet.setBounds(160, 290, 270, 28);

        lblCosto1.setFont(new java.awt.Font("Dialog", 0, 12));
        lblCosto1.setForeground(new java.awt.Color(0, 0, 0));
        lblCosto1.setText("Tipo");
        pnlEliminarPallet.add(lblCosto1);
        lblCosto1.setBounds(70, 200, 60, 20);

        rbnRack.setFont(new java.awt.Font("Dialog", 0, 12));
        rbnRack.setText("Por rack");
        rbnRack.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rbnRackActionPerformed(evt);
            }
        });
        pnlEliminarPallet.add(rbnRack);
        rbnRack.setBounds(160, 200, 125, 24);

        rbnProducto.setFont(new java.awt.Font("Dialog", 0, 12));
        rbnProducto.setText("Por Pallet");
        rbnProducto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rbnProductoActionPerformed(evt);
            }
        });
        pnlEliminarPallet.add(rbnProducto);
        rbnProducto.setBounds(370, 200, 86, 24);

        lblDescripcion.setFont(new java.awt.Font("Dialog", 0, 12));
        lblDescripcion.setForeground(new java.awt.Color(0, 0, 0));
        lblDescripcion.setText("Descripcion");
        pnlEliminarPallet.add(lblDescripcion);
        lblDescripcion.setBounds(70, 100, 73, 15);

        txtCodigo.setEnabled(false);
        pnlEliminarPallet.add(txtCodigo);
        txtCodigo.setBounds(160, 30, 270, 28);

        txtCodRack.setEnabled(false);
        pnlEliminarPallet.add(txtCodRack);
        txtCodRack.setBounds(160, 240, 270, 28);

        lblPallet.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        lblPallet.setForeground(java.awt.Color.black);
        lblPallet.setText("Pallet");
        pnlEliminarPallet.add(lblPallet);
        lblPallet.setBounds(70, 290, 80, 30);

        btnBuscarRack.setBackground(new java.awt.Color(240, 235, 226));
        btnBuscarRack.setFont(new java.awt.Font("Dialog", 0, 12));
        btnBuscarRack.setText("+");
        btnBuscarRack.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarRackActionPerformed(evt);
            }
        });
        pnlEliminarPallet.add(btnBuscarRack);
        btnBuscarRack.setBounds(440, 240, 30, 27);

        btnBuscarPallet.setBackground(new java.awt.Color(240, 235, 226));
        btnBuscarPallet.setFont(new java.awt.Font("Dialog", 0, 12));
        btnBuscarPallet.setText("+");
        btnBuscarPallet.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarPalletActionPerformed(evt);
            }
        });
        pnlEliminarPallet.add(btnBuscarPallet);
        btnBuscarPallet.setBounds(440, 290, 30, 27);

        lblBusqFila.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        lblBusqFila.setForeground(java.awt.Color.red);
        lblBusqFila.setText("(*)");
        pnlEliminarPallet.add(lblBusqFila);
        lblBusqFila.setBounds(100, 250, 30, 15);

        lblBusqFila1.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        lblBusqFila1.setForeground(java.awt.Color.red);
        lblBusqFila1.setText("(*)");
        pnlEliminarPallet.add(lblBusqFila1);
        lblBusqFila1.setBounds(110, 300, 30, 15);

        getContentPane().add(pnlEliminarPallet);
        pnlEliminarPallet.setBounds(63, 93, 570, 359);

        btnAsociar.setBackground(new java.awt.Color(240, 235, 226));
        btnAsociar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnAsociar.setForeground(new java.awt.Color(0, 0, 0));
        btnAsociar.setText("Asociar");
        btnAsociar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAsociarActionPerformed(evt);
            }
        });
        getContentPane().add(btnAsociar);
        btnAsociar.setBounds(140, 500, 110, 27);

        btnCancelar.setBackground(new java.awt.Color(240, 235, 226));
        btnCancelar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnCancelar.setForeground(new java.awt.Color(0, 0, 0));
        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        getContentPane().add(btnCancelar);
        btnCancelar.setBounds(460, 500, 110, 27);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void rbnRackActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rbnRackActionPerformed
        // TODO add your handling code here:
        this.rbnProducto.setSelected(false);
}//GEN-LAST:event_rbnRackActionPerformed

    private void rbnProductoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rbnProductoActionPerformed
        // TODO add your handling code here:
        this.rbnRack.setSelected(false);
}//GEN-LAST:event_rbnProductoActionPerformed

    private void btnBuscarRackActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarRackActionPerformed
         blRack br = new blRack();
         ArrayList<Integer> estados = new ArrayList<Integer>();
        try {
            estados = br.getEstados();
             
        } catch (SQLException ex) {
            Logger.getLogger(dlgAsociar.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            if (br.validarTabla(estados.get(1),estados.get(0))) {
                dlgElejirRack dlgElejirRack = new dlgElejirRack(null, true, INDICADOR);
                dlgElejirRack.setVisible(true);
                if (dlgElejirRack.getRackElegido() != null) {
                    int codigo = dlgElejirRack.getRackElegido().getId_rack();
                    this.txtCodRack.setText(String.valueOf(codigo));
                }
                dlgElejirRack.dispose();
            } else {
                visualHelper.mostrarMensajeError("No hay pallets dentro de ningun rack.");
            }
        } catch (SQLException ex) {
            Logger.getLogger(dlgAsociar.class.getName()).log(Level.SEVERE, null, ex);
        }
}//GEN-LAST:event_btnBuscarRackActionPerformed

    private void btnBuscarPalletActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarPalletActionPerformed
       blUbicacion bu = new blUbicacion();
       
       ArrayList<Integer> estados = new ArrayList<Integer>();
        try {
            estados = bu.getTipoEstadoInt();
            if (bu.validarTabla(estados.get(0))) {
                dlgBuscarPallet bPallet = new dlgBuscarPallet(null, true, INDICADOR_4);
                bPallet.setVisible(true);
                if (bPallet.getPalletElegido() != null) {
                    int codigo = bPallet.getPalletElegido().getId_Pallet();
                    
                    if (bPallet.estado.compareTo("Reservado") == 0){
                        this.E_RESERVADO = 4;
                        this.idUbicacion = bPallet.getUbicacionElegido().getId_ubicacion();
                    }
                    this.txtCodPallet.setText(String.valueOf(codigo));
                }
                bPallet.dispose();
            } else {
                visualHelper.mostrarMensajeError("No se ha ingresado ningun pallet al almacen.");
            }
        } catch (Exception ex) {
            Logger.getLogger(dlgAsociar.class.getName()).log(Level.SEVERE, null, ex);
        }
}//GEN-LAST:event_btnBuscarPalletActionPerformed

    private void btnAsociarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAsociarActionPerformed
         int tipo_incidencia = -1;
         Date fecha_incidente = null;
          if ((this.txtCodPallet.getText().isEmpty() && this.txtCodRack.getText().isEmpty())){
              visualHelper.mostrarMensajeAdvertencia("Debe llenar los campos obligatorios (*).");
          }
          else {
                try{
                    int codIncidente = Integer.parseInt(this.txtCodigo.getText());
                  //  fecha_incidente = visualHelper.obtenerFechaCalendario(this.dtcFecha);
                
                     if (this.rbnRack.isSelected()){
                                               
                       tipo_incidencia =  Integer.parseInt(this.txtCodRack.getText());
                       String codRack = this.txtCodRack.getText();
                       beIncidencia incidenciaxRack = new beIncidencia(codIncidente,tipo_incidencia,fecha_incidente);
                       blIncidencia blIncidencia = new blIncidencia();
                       boolean noEsta = false;
                       noEsta = blIncidencia.estaIncidencia(codIncidente,tipo_incidencia,IRACK);
                       if (noEsta){
                         blIncidencia.registrarIncidenciaxRack(incidenciaxRack);
                         (new blLog()).registrarLog(this.usuario.getIdUsuario(), this.usuario.getCargo(), "Ha ocurrido un incidente en el rack con codigo "+ codRack);
                         visualHelper.mostrarMensajeSatisfaccion("Se asocio satisfactoriamente el incidente");
                         this.dispose();
                       }
                       else{
                           visualHelper.mostrarMensajeAdvertencia("El rack ya esta asociado a la incidencia especificada");
                       }
                     } else {

                      tipo_incidencia =Integer.parseInt(this.txtCodPallet.getText());
                      String codPallet = this.txtCodPallet.getText();
                      beIncidencia incidenciaxPallet = new beIncidencia(codIncidente,tipo_incidencia,fecha_incidente);
                      boolean noEsta = false;
                      blIncidencia blIncidencia = new blIncidencia();
                      noEsta = blIncidencia.estaIncidencia(codIncidente,tipo_incidencia,IPALLET);
                      int estado = E_ACTIVO;
                      int indicador = 0;
                      if (noEsta) {
                       
                         if (E_RESERVADO == 4){
                             blPallet blPallet = new blPallet();
                             blUbicacion blUbicacion = new blUbicacion();
                             beUbicacion ubicacion = new beUbicacion();
                             bePallet pallet = blPallet.getPallet(idUbicacion);
                             int numCajas = blPallet.obtenerCajas(pallet.getId_Pallet());
                             int idProducto = blPallet.getIdProducto(pallet.getId_Pallet());
                             ubicacion =blUbicacion.obtenerUbicacionXCajas(numCajas, idProducto);
                              if ( ubicacion != null){
                                  //idOrden = -1;
                                  blOrdenDespacho orden = new blOrdenDespacho();
                                  this.idOrden = orden.quitarUbicacion(idUbicacion, pallet.getId_Pallet(),idOrden);
                                  orden.agregarOrden(ubicacion.getId_ubicacion(),this.idOrden);
                                  alAlgMetaHeu alg =blUbicacion.ubicacionesXOrden(this.idOrden);
                                  visualHelper.mostrarMensajeSatisfaccion("Se eligió un pallet reservado de la orden de despacho nro. "+idOrden+". Se recalculará la ruta óptima. Espere por favor..");
                                  visual.Despacho.dlgConsultarRutaOptima dlg = new visual.Despacho.dlgConsultarRutaOptima(this,true,this.usuario,alg,this.idOrden);
                                  dlg.setVisible(true);

                              }
                             else {
                                 visualHelper.mostrarMensajeAdvertencia("No hay ubicaciones para despachar tal orden");
                                 indicador = 1;
                             }
                         }
                         if( indicador != 1){
                             blIncidencia.registrarIncidenciaxPallet(incidenciaxPallet,estado);
                             (new blLog()).registrarLog(this.usuario.getIdUsuario(), this.usuario.getCargo(), "Ha ocurrido un incidente en el pallet con codigo "+ codPallet);
                             visualHelper.mostrarMensajeSatisfaccion("Se asocio satisfactoriamente el incidente");

                         }
                         this.dispose();
                      }
                      else{
                          visualHelper.mostrarMensajeAdvertencia("El pallet ya esta asociado a la incidencia especificada.");
                      }
                  
                    }

                    
                    
                } catch (Exception e){
                    e.printStackTrace();
                    visualHelper.mostrarMensajeError("No se pudo asociar el incidente.");
                }
              }

         
    }//GEN-LAST:event_btnAsociarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
            int rslt = JOptionPane.showConfirmDialog(this, "¿Está seguro que desea cancelar el asocio del incidente?", "Confirmación", JOptionPane.YES_NO_OPTION);
        if (rslt == JOptionPane.YES_OPTION){
            this.setVisible(false);
            this.dispose();
        }
}//GEN-LAST:event_btnCancelarActionPerformed

    /**
    * @param args the command line arguments
    */
 

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAsociar;
    private javax.swing.JButton btnBuscarPallet;
    private javax.swing.JButton btnBuscarRack;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JLabel lblBusqFila;
    private javax.swing.JLabel lblBusqFila1;
    private javax.swing.JLabel lblCodigo;
    private javax.swing.JLabel lblCosto1;
    private javax.swing.JLabel lblDescripcion;
    private javax.swing.JLabel lblPallet;
    private javax.swing.JLabel lblRack;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JPanel pnlEliminarPallet;
    private javax.swing.JRadioButton rbnProducto;
    private javax.swing.JRadioButton rbnRack;
    private javax.swing.JTextField txtCodPallet;
    private javax.swing.JTextField txtCodRack;
    private javax.swing.JTextField txtCodigo;
    private javax.swing.JTextArea txtDescripcion;
    // End of variables declaration//GEN-END:variables

}
